/**
 * Node.js 测试脚本 - 无需安装任何依赖
 *
 * 使用方法:
 *   1. 启动 Python 服务: python3 app.py
 *   2. 运行测试: node test.js
 */

const http = require('http');

// 配置
const API_HOST = 'localhost';
const API_PORT = 8000;

/**
 * HTTP 请求封装
 */
function request(path, method = 'GET', data = null) {
    return new Promise((resolve, reject) => {
        const options = {
            hostname: API_HOST,
            port: API_PORT,
            path: path,
            method: method,
            headers: {
                'Content-Type': 'application/json'
            },
            timeout: 600000  // 10分钟超时
        };

        const req = http.request(options, (res) => {
            let body = '';
            res.on('data', (chunk) => body += chunk);
            res.on('end', () => {
                try {
                    resolve(JSON.parse(body));
                } catch (e) {
                    reject(new Error('解析响应失败'));
                }
            });
        });

        req.on('error', reject);
        req.on('timeout', () => reject(new Error('请求超时')));

        if (data) {
            req.write(JSON.stringify(data));
        }

        req.end();
    });
}

/**
 * 测试1: 健康检查
 */
async function testHealth() {
    console.log('\n=== 测试1: 健康检查 ===');
    try {
        const result = await request('/health');
        console.log('✅ 服务状态:', result.status);
        console.log('   模型:', result.model);
        console.log('   设备:', result.device);
        return true;
    } catch (error) {
        console.error('❌ 失败:', error.message);
        return false;
    }
}

/**
 * 测试2: 转录视频（使用代理路径）
 */
async function testTranscribe() {
    console.log('\n=== 测试2: 转录视频（代理路径） ===');

    // 使用代理路径（需要在 config.json 中配置）
    const videoPath = '/bstation/BV13DGez8ETV苏州园林2-em class=keyword狮子林em 全网最详细游玩攻略.mp4';

    console.log('请求路径:', videoPath);
    console.log('⏳ 转录中，请耐心等待...');

    const startTime = Date.now();

    try {
        const result = await request('/transcribe', 'POST', {
            video_path: videoPath,
            language: 'zh'
        });

        const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);

        if (result.success) {
            console.log(`✅ 转录成功! (耗时: ${elapsed}秒)`);
            console.log('   语言:', result.data.language);
            console.log('   时长:', result.data.duration.toFixed(1), '秒');
            console.log('   片段数:', result.data.segments_count);
            console.log('\n文本预览（前200字）:');
            console.log('----------------------------------------');
            console.log(result.data.text.substring(0, 200) + '...');
            console.log('----------------------------------------');
            console.log('\n输出文件:');
            result.data.output_files.forEach(f => console.log('  -', f));
            return true;
        } else {
            console.error('❌ 转录失败:', result.error);
            return false;
        }
    } catch (error) {
        console.error('❌ 请求失败:', error.message);
        return false;
    }
}

/**
 * 测试3: 转录视频（使用完整路径）
 */
async function testTranscribeFullPath() {
    console.log('\n=== 测试3: 转录视频（完整路径） ===');

    // 使用完整路径
    const videoPath = '/Volumes/Samsung_T5/数据爬取/B 站/关键词作品/狮子林/视频作品/BV13DGez8ETV苏州园林2-em class=keyword狮子林em 全网最详细游玩攻略.mp4';

    console.log('使用完整路径（不经过代理）');
    console.log('⏳ 转录中...');

    try {
        const result = await request('/transcribe', 'POST', {
            video_path: videoPath,
            language: 'zh'
        });

        if (result.success) {
            console.log('✅ 转录成功!');
            console.log('   文本长度:', result.data.text.length, '字符');
            return true;
        } else {
            console.error('❌ 转录失败:', result.error);
            return false;
        }
    } catch (error) {
        console.error('❌ 请求失败:', error.message);
        return false;
    }
}

/**
 * 主测试流程
 */
async function main() {
    console.log('========================================');
    console.log('  视频转录服务测试');
    console.log('========================================');
    console.log(`服务地址: http://${API_HOST}:${API_PORT}`);

    // 测试1: 健康检查
    const healthOk = await testHealth();

    if (!healthOk) {
        console.log('\n❌ 服务未启动，请先运行: python3 app.py');
        process.exit(1);
    }

    // 测试2: 使用代理路径转录
    await testTranscribe();

    // 测试3: 使用完整路径转录（可选，注释掉避免重复转录）
    // await testTranscribeFullPath();

    console.log('\n========================================');
    console.log('  测试完成');
    console.log('========================================');
}

// 运行测试
main().catch(error => {
    console.error('\n💥 测试失败:', error.message);
    process.exit(1);
});
